A data stream is often conceptualized as consisting of discrete values. For example, a binary data stream may be represented by the symbols {1, −1} or {1, 0}. The data stream would then be conceptualized as a string of binary symbols, for example, 10001110100101.
However, in the real world, the data stream is in actuality an analog representation of the discrete values. Extracting the discrete values from the analog data stream can be difficult, especially when the phase and duty cycle of the data stream are varying or unknown. Jitter can also negatively impact accurate data extraction.
Programmable logic devices (PLDs) are integrated circuit devices that often include input/output (I/O) components, memory components, and processing components (such as microprocessors and digital signal processors [DSPs]) in configurable arrangements. A particular PLD, then, may be configured in many different ways that each correspond to a different application. Thus, a data stream received by a PLD may come from a variety of sources, the variety being a function of the wide variety of different applications.
There is a need for a device that accurately extracts discrete values from a data stream. There is a need for such a device that can respond flexibly to a variety of data streams resulting from a wide variety of PLD implementations. There is a need for such a device that is quick, is efficient, and may be implemented with a small number of components.